package com.java.zhuiyun.api.sysmenu.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.java.zhuiyun.api.sysmenu.entity.Menu;
import com.java.zhuiyun.api.sysmenu.mapper.MenuMapper;
import com.java.zhuiyun.api.sysmenu.service.IMenuService;
import com.java.zhuiyun.api.sysrolemenu.mapper.RoleMenuMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @ClassName MenuServiceImpl
 * @Description TODO
 * @Author xy
 * @Date 2023/8/16 16:26
 **/
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {

    @Resource
    MenuMapper menuMapper;

    @Resource
    RoleMenuMapper roleMenuMapper;

    /**
    * @Author xy
    * @Description 全查
    * @Date 2023/8/16 16:44
    * @Return  * @param null
    */

    @Override
    public List<Menu> MenuList() {
        return menuMapper.MenuList();
    }

    /**
    * @Author xy
    * @Description 添加
    * @Date 2023/8/16 16:44
    * @Return  * @param null
    */
    @Override
    public int MenuAdd(Menu menu) {
        // 获取当前时间
        Date date = new Date();
        // 添加时间时获取当前时间
        menu.setCreateTime(date);
        // 添加时字段del_flag默认为0
        menu.setDelFlag(0);
        return menuMapper.MenuAdd(menu);
    }

    /**
    * @Author xy
    * @Description 修改
    * @Date 2023/8/16 16:44
    * @Return  * @param null
    */
    @Override
    public int MenuUpdate(Menu menu) {
        // 获取当前时间
        Date date = new Date();
        // 获取当前修改时间
        menu.setUpdateTime(date);
        return menuMapper.Menuupdate(menu);
    }

    /**
    * @Author xy
    * @Description 修改目录
    * @Date 2023/9/4 8:28
    * @Return  * @param null
    */
    @Override
    public int updateml(Menu menu) {
        // 更改菜单目录
        return menuMapper.updateml(menu);
    }

    /**
    * @Author xy
    * @Description 逻辑删除
    * @Date 2023/8/16 16:45
    * @Return  * @param null
    */
    @Override
    public int MenuDelete(Integer id) {
        return menuMapper.MenuDelete(id);
    }

    @Override
    public List<Menu> findMenus(String mname) {
        List<Menu> list = menuMapper.customSearch();
        // 找出pid为null的一级菜单
        List<Menu> parentNodes = list.stream().filter(menu -> menu.getPid() == null).collect(Collectors.toList());
        // 找出一级菜单的子菜单
        for (Menu menu : parentNodes) {
            // 筛选所有数据中pid=父级id的数据就是二级菜单
            menu.setChildren(list.stream().filter(m -> menu.getId().equals(m.getPid())).collect(Collectors.toList()));
        }
        return parentNodes;
    }

}
